class person{
    var doc = 1
    lazy var excel = "yo"
    var width = 10
    var round:Int{
        get{
            return width*4
        }
    }
}

var pp = person()
pp.round


print(pp.width)

//被final修饰的类、属性、方法不能被重写

//定义类属性 加上关键字class
class Circle{
//    构造方法没有func修饰
    let title : Int = 1
    var graphic:String?
    init(){
//        可以在这里面初始化类的属性
    }
//    这个存在的时候init方法不一定显式存在
    convenience init(string:String){
        self.init()
    }
    
    class var PI:Double{
        return 3.14
    }
    
    //初始化的时候不会引发willset和didset方法
    var width:Double = 20{
        willSet{
            print("new value is\(newValue) ")
        }
        didSet{
            print("old value is\(oldValue)")
        }
    }
    
    class func doubleWidth(wide:Int)->Int {
        return wide*2
    }
    //第一个参数是内部参数，所以参数名可以省略，如果加上#那么就变成内部和外部参数名
    func four(wide:Int,length:Int)->Int{
        return wide+length
    }
    var speed : Int  {
//        get、set、willSet、didSet 不能共存
        get{
            return 20
        }
        set{
            //严重注意的是，在get和set方法里面的设置都有可能会触发对应的get和set，造成循环引用
//            return self.speed + 29
        }
    }
    //可以在类方法里面定义self，代表这个类哦
    deinit{
//        一般用于资源的释放，不允许显式调用
    }
}

Circle.PI

var cir = Circle()
cir.width = 11
cir.title
cir.four(20, length: 30)


var num:Int? = 10
var age:Int = num!
//认为gud永远有数
var gud:Int! = 20




















